import request from '../utils/request'

/**
 * 订单相关API接口
 */

// 订单状态枚举
export enum OrderStatus {
  PENDING = 'pending',      // 待支付
  PAID = 'paid',           // 已支付
  CONFIRMED = 'confirmed', // 已确认
  COMPLETED = 'completed', // 已完成
  CANCELLED = 'cancelled', // 已取消
  REFUNDING = 'refunding', // 退款中
  REFUNDED = 'refunded',   // 已退款
}

// 订单类型枚举
export enum OrderType {
  TICKET = 'ticket',       // 门票订单
  HOTEL = 'hotel',         // 酒店订单
  ACTIVITY = 'activity',   // 活动订单
  PACKAGE = 'package',     // 套餐订单
}

// 支付方式枚举
export enum PaymentMethod {
  WECHAT = 'wechat',       // 微信支付
  ALIPAY = 'alipay',       // 支付宝
  BANK = 'bank',           // 银行卡
  CASH = 'cash',           // 现金
  OTHER = 'other',         // 其他方式
}

// 订单信息接口
export interface Order {
  id: string;
  orderNo: string;         // 订单号
  userId: string;          // 用户ID
  userName: string;        // 用户姓名
  userPhone: string;       // 用户手机号
  orderType: OrderType;    // 订单类型
  orderStatus: OrderStatus; // 订单状态
  productId: string;       // 产品ID
  productName: string;     // 产品名称
  productQuantity: number; // 购买数量
  unitPrice: number;       // 单价(元)
  totalAmount: number;     // 总金额(元)
  discountAmount?: number; // 优惠金额(元)
  paymentAmount: number;   // 支付金额(元)
  paymentMethod?: PaymentMethod; // 支付方式
  paymentTime?: string;    // 支付时间
  remark?: string;         // 备注
  createTime: string;      // 创建时间
  updateTime?: string;     // 更新时间
  contactName?: string;    // 联系人姓名
  contactPhone?: string;   // 联系人电话
  useDate?: string;        // 使用日期(景点门票、活动等) 
  useTime?: string;        // 使用时间(景点门票、活动等)
  guests?: OrderGuest[];   // 游客信息(仅限门票、活动类订单)
  checkInDate?: string;    // 入住日期(仅限酒店订单)
  checkOutDate?: string;   // 离店日期(仅限酒店订单)
  roomType?: string;       // 房间类型(仅限酒店订单)
  roomCount?: number;      // 房间数量(仅限酒店订单)
  cancelReason?: string;   // 取消原因
  refundAmount?: number;   // 退款金额
  refundTime?: string;     // 退款时间
  refundReason?: string;   // 退款原因
}

// 游客信息接口
export interface OrderGuest {
  name: string;            // 姓名
  idType: string;          // 证件类型
  idNumber: string;        // 证件号码
  phone?: string;          // 手机号
}

// 订单列表请求参数
export interface OrderListParams {
  keyword?: string;        // 关键字(订单号、用户姓名、手机号)
  orderType?: OrderType;   // 订单类型
  orderStatus?: OrderStatus; // 订单状态
  startDate?: string;      // 开始日期
  endDate?: string;        // 结束日期
  page?: number;           // 当前页码
  pageSize?: number;       // 每页记录数
}

// 订单列表响应数据
export interface OrderListResult {
  list: Order[];           // 订单列表
  total: number;           // 总记录数
  page: number;            // 当前页码
  pageSize: number;        // 每页记录数
}

/**
 * 获取订单列表
 */
export function getOrders(params: OrderListParams): Promise<OrderListResult> {
  return request({
    url: '/orders',
    method: 'GET',
    params
  })
}

/**
 * 获取订单详情
 */
export function getOrderDetail(id: string): Promise<Order> {
  return request({
    url: `/orders/${id}`,
    method: 'GET'
  })
}

/**
 * 更新订单状态
 */
export function updateOrderStatus(id: string, orderStatus: OrderStatus, reason?: string): Promise<Order> {
  return request({
    url: `/orders/${id}/status`,
    method: 'PATCH',
    data: { 
      status: orderStatus,
      reason 
    }
  })
}

/**
 * 确认订单
 */
export function confirmOrder(id: string): Promise<Order> {
  return updateOrderStatus(id, OrderStatus.CONFIRMED)
}

/**
 * 完成订单
 */
export function completeOrder(id: string): Promise<Order> {
  return updateOrderStatus(id, OrderStatus.COMPLETED)
}

/**
 * 取消订单
 */
export function cancelOrder(id: string, reason: string): Promise<Order> {
  return updateOrderStatus(id, OrderStatus.CANCELLED, reason)
}

/**
 * 申请退款
 */
export function requestRefund(id: string, reason: string, amount: number): Promise<Order> {
  return request({
    url: `/orders/${id}/refund`,
    method: 'POST',
    data: { 
      reason,
      amount
    }
  })
}

/**
 * 确认退款
 */
export function confirmRefund(id: string, amount: number): Promise<Order> {
  return request({
    url: `/orders/${id}/refund/confirm`,
    method: 'POST',
    data: { amount }
  })
}

/**
 * 编辑订单备注
 */
export function updateOrderRemark(id: string, remark: string): Promise<Order> {
  return request({
    url: `/orders/${id}/remark`,
    method: 'PUT',
    data: { remark }
  })
}

/**
 * 导出订单数据
 */
export function exportOrders(params: OrderListParams): Promise<Blob> {
  return request({
    url: '/orders/export',
    method: 'GET',
    params,
    responseType: 'blob'
  })
} 